/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI.GerenciarTREF;

import Biblioteca.Library;
import Biblioteca.VerificaErros;
import ClassesListas.Pessoas;
import ClassesListas.SubFases;
import ClassesUnicas.ComboBoxMultiData;
import java.util.ArrayList;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 * FrameDefault
 *
 * Versao 1.0
 *
 * Data 16/02/2013
 *
 * @author Igor
 */
public class FrameMatrizConfusao extends FramePattern implements InterfaceFrame {

    /**
     * Creates new form FrameDefault
     */
    public FrameMatrizConfusao() {
        initComponents();

        //Library.reagirEnter(buttonNovo);
        Library.reagirEnter(buttonSalvar);
        Library.reagirEnter(buttonLimpar);
        Library.reagirEnter(buttonFechar);

        radioGroupButtonTipoMatrizConfusao.add(radioButtonExpressoes);
        radioGroupButtonTipoMatrizConfusao.add(radioButtonImagens);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        radioGroupButtonTipoMatrizConfusao = new javax.swing.ButtonGroup();
        panelTitulo = new javax.swing.JPanel();
        labelTitulo = new javax.swing.JLabel();
        labelCamposObrigatorios = new javax.swing.JLabel();
        panelBotoes = new javax.swing.JPanel();
        buttonSalvar = new javax.swing.JButton();
        buttonLimpar = new javax.swing.JButton();
        buttonFechar = new javax.swing.JButton();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        panelFiltros = new javax.swing.JPanel();
        labelJogador = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        tableJogadores = new javax.swing.JTable();
        checkBoxSelecionarTodos = new javax.swing.JCheckBox();
        formatTextPeriodoInicial = new javax.swing.JFormattedTextField();
        labelPeriodoFinal = new javax.swing.JLabel();
        labelPeriodoInicial = new javax.swing.JLabel();
        formatTextPeriodoFinal = new javax.swing.JFormattedTextField();
        comboBoxSubFases = new javax.swing.JComboBox();
        labelSubFaseIntensidade = new javax.swing.JLabel();
        labelTexto = new javax.swing.JLabel();
        labelTexto2 = new javax.swing.JLabel();
        labelTexto3 = new javax.swing.JLabel();
        panelRadioButtons = new javax.swing.JPanel();
        radioButtonExpressoes = new javax.swing.JRadioButton();
        radioButtonImagens = new javax.swing.JRadioButton();
        labelTexto4 = new javax.swing.JLabel();
        labelTexto5 = new javax.swing.JLabel();
        labelTexto6 = new javax.swing.JLabel();
        labelTexto7 = new javax.swing.JLabel();
        checkBoxApenasBaseline = new javax.swing.JCheckBox();
        checkBoxTempoResposta = new javax.swing.JCheckBox();
        jLabel1 = new javax.swing.JLabel();

        setClosable(true);
        setIconifiable(true);
        setTitle("Matriz de Confusão por Jogador");
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                formComponentShown(evt);
            }
        });

        panelTitulo.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        labelTitulo.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        labelTitulo.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        labelTitulo.setText("Tela utilizada para visualizar as matrizes de confusão por jogador");

        labelCamposObrigatorios.setText("Campos marcados com * são obrigatórios");

        javax.swing.GroupLayout panelTituloLayout = new javax.swing.GroupLayout(panelTitulo);
        panelTitulo.setLayout(panelTituloLayout);
        panelTituloLayout.setHorizontalGroup(
            panelTituloLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelTituloLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelTituloLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(labelTitulo)
                    .addComponent(labelCamposObrigatorios))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelTituloLayout.setVerticalGroup(
            panelTituloLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelTituloLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(labelTitulo)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(labelCamposObrigatorios))
        );

        panelBotoes.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        buttonSalvar.setText("Gerar Matriz");
        buttonSalvar.setToolTipText("Clique para salvar os dados digitados");
        buttonSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonSalvarActionPerformed(evt);
            }
        });

        buttonLimpar.setText("Limpar");
        buttonLimpar.setToolTipText("Clique para limpar a tela e habilitar um novo registro");
        buttonLimpar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonLimparActionPerformed(evt);
            }
        });

        buttonFechar.setText("Fechar");
        buttonFechar.setToolTipText("Cancela a operação e fecha a janela");
        buttonFechar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonFecharActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelBotoesLayout = new javax.swing.GroupLayout(panelBotoes);
        panelBotoes.setLayout(panelBotoesLayout);
        panelBotoesLayout.setHorizontalGroup(
            panelBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelBotoesLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(buttonSalvar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(buttonLimpar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(buttonFechar)
                .addContainerGap())
        );

        panelBotoesLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonFechar, buttonLimpar, buttonSalvar});

        panelBotoesLayout.setVerticalGroup(
            panelBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelBotoesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(buttonLimpar)
                    .addComponent(buttonSalvar)
                    .addComponent(buttonFechar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        panelFiltros.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 12), java.awt.Color.black)); // NOI18N

        labelJogador.setText("Jogador:");

        tableJogadores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Título 1"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane2.setViewportView(tableJogadores);

        checkBoxSelecionarTodos.setText("Selecionar todos");
        checkBoxSelecionarTodos.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                checkBoxSelecionarTodosItemStateChanged(evt);
            }
        });

        try {
            formatTextPeriodoInicial.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        formatTextPeriodoInicial.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                formatTextPeriodoInicialFocusLost(evt);
            }
        });

        labelPeriodoFinal.setText("Período Final:");

        labelPeriodoInicial.setText("Período Inicial:");

        try {
            formatTextPeriodoFinal.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        formatTextPeriodoFinal.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                formatTextPeriodoFinalFocusLost(evt);
            }
        });

        comboBoxSubFases.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "<Escolha um item>" }));

        labelSubFaseIntensidade.setText("SubFase - Intensidade:");

        labelTexto.setFont(new java.awt.Font("Tahoma", 2, 13)); // NOI18N
        labelTexto.setText("*Caso os períodos estejam sem preenchimento, será considerado todos os períodos;");

        labelTexto2.setFont(new java.awt.Font("Tahoma", 2, 13)); // NOI18N
        labelTexto2.setText("*Caso não seja selecionado uma 'SubFase - Intensidade', será considerado todas;");

        labelTexto3.setFont(new java.awt.Font("Tahoma", 2, 13)); // NOI18N
        labelTexto3.setText("*Na matriz de confusão gerada, a coluna 'Descrição' representa a expressão real.");

        panelRadioButtons.setBorder(javax.swing.BorderFactory.createTitledBorder("   Tipo Matriz Confusão   "));

        radioButtonExpressoes.setText("Expressões");

        radioButtonImagens.setText("Imagens");

        javax.swing.GroupLayout panelRadioButtonsLayout = new javax.swing.GroupLayout(panelRadioButtons);
        panelRadioButtons.setLayout(panelRadioButtonsLayout);
        panelRadioButtonsLayout.setHorizontalGroup(
            panelRadioButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelRadioButtonsLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelRadioButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(radioButtonExpressoes)
                    .addComponent(radioButtonImagens))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelRadioButtonsLayout.setVerticalGroup(
            panelRadioButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelRadioButtonsLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(radioButtonExpressoes)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(radioButtonImagens)
                .addGap(30, 30, 30))
        );

        labelTexto4.setFont(new java.awt.Font("Tahoma", 2, 13)); // NOI18N
        labelTexto4.setText("*Caso não seja selecionado nenhum jogador, será considerado 1 matriz para todos os jogadores.");

        labelTexto5.setFont(new java.awt.Font("Tahoma", 2, 13)); // NOI18N
        labelTexto5.setText("*'Apenas Baseline' gera a Matriz de Confusão do(s) jogador(es) selecionados;");

        labelTexto6.setFont(new java.awt.Font("Tahoma", 2, 13)); // NOI18N
        labelTexto6.setText("*'Selcionar todos' gera a matriz confusão de cada jogador separadamente;");

        labelTexto7.setFont(new java.awt.Font("Tahoma", 2, 13)); // NOI18N
        labelTexto7.setText("*'Adicionar tempo resposta' adicionará o tempo de resposta (média) das respostas apresentadas na");

        checkBoxApenasBaseline.setText("Apenas Baseline");
        checkBoxApenasBaseline.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                checkBoxApenasBaselineActionPerformed(evt);
            }
        });

        checkBoxTempoResposta.setText("Adicionar tempo resposta");

        jLabel1.setFont(new java.awt.Font("Tahoma", 2, 13)); // NOI18N
        jLabel1.setText("Matriz de confusão gerada;");
        jLabel1.setToolTipText("");

        javax.swing.GroupLayout panelFiltrosLayout = new javax.swing.GroupLayout(panelFiltros);
        panelFiltros.setLayout(panelFiltrosLayout);
        panelFiltrosLayout.setHorizontalGroup(
            panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelFiltrosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(labelJogador)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 370, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(checkBoxSelecionarTodos))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addGroup(panelFiltrosLayout.createSequentialGroup()
                            .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(comboBoxSubFases, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(labelSubFaseIntensidade))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(panelRadioButtons, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGroup(panelFiltrosLayout.createSequentialGroup()
                            .addComponent(formatTextPeriodoInicial, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(formatTextPeriodoFinal, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(panelFiltrosLayout.createSequentialGroup()
                            .addComponent(labelPeriodoInicial, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(labelPeriodoFinal, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(labelTexto)
                        .addComponent(labelTexto2)
                        .addComponent(labelTexto3)
                        .addComponent(labelTexto4)
                        .addComponent(labelTexto5)
                        .addComponent(labelTexto6))
                    .addGroup(panelFiltrosLayout.createSequentialGroup()
                        .addComponent(checkBoxApenasBaseline)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(checkBoxTempoResposta))
                    .addComponent(labelTexto7)
                    .addComponent(jLabel1))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelFiltrosLayout.setVerticalGroup(
            panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelFiltrosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelJogador)
                    .addComponent(checkBoxApenasBaseline)
                    .addComponent(checkBoxTempoResposta))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelFiltrosLayout.createSequentialGroup()
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 323, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(checkBoxSelecionarTodos)
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(panelFiltrosLayout.createSequentialGroup()
                        .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(labelPeriodoInicial)
                            .addComponent(labelPeriodoFinal))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(formatTextPeriodoInicial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(formatTextPeriodoFinal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(panelFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(panelFiltrosLayout.createSequentialGroup()
                                .addComponent(labelSubFaseIntensidade)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(comboBoxSubFases, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(panelRadioButtons, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(labelTexto5)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(labelTexto7)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(labelTexto4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(labelTexto6)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(labelTexto)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(labelTexto2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(labelTexto3)
                        .addGap(0, 0, Short.MAX_VALUE))))
        );

        jTabbedPane1.addTab("Filtros", panelFiltros);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 992, Short.MAX_VALUE)
                    .addComponent(panelTitulo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(panelBotoes, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 427, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelBotoes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
        // TODO add your handling code here:
        limparCampos();
    }//GEN-LAST:event_formComponentShown

    private void buttonLimparActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonLimparActionPerformed
        // TODO add your handling code here:
        limparCampos();
    }//GEN-LAST:event_buttonLimparActionPerformed

    private void buttonFecharActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonFecharActionPerformed
        // TODO add your handling code here:
        if (super.dlg == null) {
            super.fecharAplicacao();
        } else {
            super.dlg.dispose();
        }
    }//GEN-LAST:event_buttonFecharActionPerformed

    private void checkBoxSelecionarTodosItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_checkBoxSelecionarTodosItemStateChanged
        // TODO add your handling code here:
        if (tableJogadores.getRowCount() >= 0) {
            for (int i = 0; i < tableJogadores.getRowCount(); i++) {
                tableJogadores.setValueAt(checkBoxSelecionarTodos.isSelected(), i, 0);
            }
        }
    }//GEN-LAST:event_checkBoxSelecionarTodosItemStateChanged

    private void buttonSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSalvarActionPerformed
        // TODO add your handling code here:
        boolean tudoCerto = true;
        if (tudoCerto && !formatTextPeriodoInicial.getText().equals("  /  /    ") && !Library.validaData(formatTextPeriodoInicial.getText())) {
            tudoCerto = false;
            JOptionPane.showMessageDialog(null, "Data do Período Inicial inválida.", "Atenção!", JOptionPane.ERROR_MESSAGE);
        }

        if (tudoCerto && !formatTextPeriodoFinal.getText().equals("  /  /    ") && !Library.validaData(formatTextPeriodoFinal.getText())) {
            tudoCerto = false;
            JOptionPane.showMessageDialog(null, "Data do Período Final inválida.", "Atenção!", JOptionPane.ERROR_MESSAGE);
        }

        if (tudoCerto && radioGroupButtonTipoMatrizConfusao.getSelection() == null) {
            tudoCerto = false;
            JOptionPane.showMessageDialog(null, "Selecione um Tipo de Matriz Confusão.", "Atenção!", JOptionPane.ERROR_MESSAGE);
        }

        if (tudoCerto) {
            String tipoMatrizConfusao = null;
            String idFase = null;
            String idSubFase = null;
            String descricaoSubFaseIntensidadeParaFrameMatrizConfusao;
            String periodoInicial = null;
            String periodoFinal = null;
            String tituloPanel = null;

            if (radioButtonExpressoes.isSelected()) {
                tipoMatrizConfusao = "Expressões";
            } else if (radioButtonImagens.isSelected()) {
                tipoMatrizConfusao = "Imagens";
            }

            //Caso esteja selecionado uma SubFaseIntensidade
            if (comboBoxSubFases.getSelectedIndex() != 0) {
                idFase = Long.toString(((ComboBoxMultiData) comboBoxSubFases.getSelectedItem()).getCodigo1());
                idSubFase = Long.toString(((ComboBoxMultiData) comboBoxSubFases.getSelectedItem()).getCodigo2());
                descricaoSubFaseIntensidadeParaFrameMatrizConfusao = ((ComboBoxMultiData) comboBoxSubFases.getSelectedItem()).toString();
            } else {
                descricaoSubFaseIntensidadeParaFrameMatrizConfusao = "Todos";
            }

            //Se existir um periodo digitado
            if (!formatTextPeriodoInicial.getText().equals("  /  /    ") && formatTextPeriodoInicial.isEnabled()) {
                periodoInicial = formatTextPeriodoInicial.getText();
            }

            //Se existir um periodo digitado
            if (!formatTextPeriodoFinal.getText().equals("  /  /    ") && formatTextPeriodoFinal.isEnabled()) {
                periodoFinal = formatTextPeriodoFinal.getText();
            }

            Boolean selecionouJogador = false;
            for (int i = 0; i < tableJogadores.getRowCount(); i++) {
                if (((Boolean) tableJogadores.getValueAt(i, 0)) == true) {
                    //Verifica que foi selecionado pelo menos 1 jogador
                    selecionouJogador = true;
                    break;
                }
            }

            //Lista de panel para controlar os panel gerados dinamicamente
            ArrayList<JPanel> listaPanel = null;

            if (selecionouJogador) {
                //caso tenha selecionado algum jogador
                geraMatrizConfusaoJogadores(listaPanel, tipoMatrizConfusao, descricaoSubFaseIntensidadeParaFrameMatrizConfusao, periodoInicial, periodoFinal, idFase, idSubFase, tituloPanel);
            } else {
                //Caso não tenha selecionado algum jogador, entao considerar que serao todos jogadores
                geraMatrizConfusaoTodosJogadores(listaPanel, tipoMatrizConfusao, descricaoSubFaseIntensidadeParaFrameMatrizConfusao, periodoInicial, periodoFinal, idFase, idSubFase, tituloPanel);
            }
        }
    }//GEN-LAST:event_buttonSalvarActionPerformed

    private void formatTextPeriodoInicialFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_formatTextPeriodoInicialFocusLost
        // TODO add your handling code here:
        formatTextPeriodoInicial.setFocusLostBehavior(JFormattedTextField.COMMIT);
    }//GEN-LAST:event_formatTextPeriodoInicialFocusLost

    private void formatTextPeriodoFinalFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_formatTextPeriodoFinalFocusLost
        // TODO add your handling code here:
        formatTextPeriodoFinal.setFocusLostBehavior(JFormattedTextField.COMMIT);
    }//GEN-LAST:event_formatTextPeriodoFinalFocusLost

    private void checkBoxApenasBaselineActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkBoxApenasBaselineActionPerformed
        // TODO add your handling code here:
        formatTextPeriodoInicial.setEnabled(!checkBoxApenasBaseline.isSelected());
        formatTextPeriodoFinal.setEnabled(!checkBoxApenasBaseline.isSelected());
    }//GEN-LAST:event_checkBoxApenasBaselineActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton buttonFechar;
    private javax.swing.JButton buttonLimpar;
    private javax.swing.JButton buttonSalvar;
    private javax.swing.JCheckBox checkBoxApenasBaseline;
    private javax.swing.JCheckBox checkBoxSelecionarTodos;
    private javax.swing.JCheckBox checkBoxTempoResposta;
    private javax.swing.JComboBox comboBoxSubFases;
    private javax.swing.JFormattedTextField formatTextPeriodoFinal;
    private javax.swing.JFormattedTextField formatTextPeriodoInicial;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JLabel labelCamposObrigatorios;
    private javax.swing.JLabel labelJogador;
    private javax.swing.JLabel labelPeriodoFinal;
    private javax.swing.JLabel labelPeriodoInicial;
    private javax.swing.JLabel labelSubFaseIntensidade;
    private javax.swing.JLabel labelTexto;
    private javax.swing.JLabel labelTexto2;
    private javax.swing.JLabel labelTexto3;
    private javax.swing.JLabel labelTexto4;
    private javax.swing.JLabel labelTexto5;
    private javax.swing.JLabel labelTexto6;
    private javax.swing.JLabel labelTexto7;
    private javax.swing.JLabel labelTitulo;
    private javax.swing.JPanel panelBotoes;
    private javax.swing.JPanel panelFiltros;
    private javax.swing.JPanel panelRadioButtons;
    private javax.swing.JPanel panelTitulo;
    private javax.swing.JRadioButton radioButtonExpressoes;
    private javax.swing.JRadioButton radioButtonImagens;
    private javax.swing.ButtonGroup radioGroupButtonTipoMatrizConfusao;
    private javax.swing.JTable tableJogadores;
    // End of variables declaration//GEN-END:variables

    @Override
    public void limparCampos() {
        Boolean gerouAbas = false;

        if (jTabbedPane1.getTabCount() > 1) {
            gerouAbas = true;
            switch (JOptionPane.showConfirmDialog(null, "Tem certeza que deseja Limpar?\nEste procedimento fechará todas abas que foram geradas.", "Atenção", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null)) {
                case JOptionPane.YES_OPTION:
                    gerouAbas = false;
                    break;
            }
        }
        if (!gerouAbas) {
            Library.limpaTextos(panelFiltros);
            //jTextField.grabFocus();

            radioGroupButtonTipoMatrizConfusao.clearSelection();
            checkBoxTempoResposta.setSelected(false);
            checkBoxApenasBaseline.setSelected(false);
            checkBoxSelecionarTodos.setSelected(false);
            listaPacientes();
            listaSubFases();

            while (jTabbedPane1.getTabCount() > 1) {
                jTabbedPane1.remove(1);
            }
        }
    }

    @Override
    public void mostraDadosObjeto() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    /**
     * Lista registro de Pacientes no ComboBox
     */
    private void listaPacientes() {
        try {
            Pessoas pessoas = new Pessoas();
            pessoas.setPessoas(pessoas.getPessoaDAO().buscaPessoas(null, null, null, "DESCRICAO"));
            pessoas.listarPessoasCheckBox(tableJogadores);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, VerificaErros.retornaMensagemErro(e), "Erro!", JOptionPane.ERROR_MESSAGE);
        }
    }

    /**
     * Lista registro de Tipos de Profissional no ComboBox
     */
    private void listaSubFases() {
        try {
            SubFases subFases = new SubFases();
            subFases.setSubFases(subFases.getSubFaseDAO().buscaSubFases());
            subFases.listarSubFases(comboBoxSubFases);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, VerificaErros.retornaMensagemErro(e), "Erro!", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void geraMatrizConfusaoJogadores(ArrayList<JPanel> listaPanel, String tipoMatrizConfusao, String descricaoSubFaseIntensidadeParaFrameMatrizConfusao, String periodoInicial, String periodoFinal, String idFase, String idSubFase, String tituloPanel) {
        for (int i = 0; i < tableJogadores.getRowCount(); i++) {
            if (((Boolean) tableJogadores.getValueAt(i, 0)) == true) {
                if (listaPanel == null) {
                    listaPanel = new ArrayList<JPanel>();
                }

                String nomeJogador = ((String) tableJogadores.getValueAt(i, 2));

                FramePanelMatrizConfusao matriz = new FramePanelMatrizConfusao(jTabbedPane1, listaPanel);
                listaPanel.add(matriz);
                matriz.setIndice(i);

                try {
                    int tipoBusca = 2;
                    if (radioButtonExpressoes.isSelected()) {
                        tipoBusca = 1;
                    }
                    matriz.getLinhasMatrizConfusao().setLinhasMatrizConfusao(matriz.getLinhasMatrizConfusao().getMatrizConfusaoDAO().matrizConfusaoExpressoes(tipoBusca, ((String) tableJogadores.getValueAt(i, 1)), periodoInicial, periodoFinal, idFase, idSubFase, checkBoxApenasBaseline.isSelected(), null));
                    matriz.getLinhasMatrizConfusao().listarLinhasMatrizConfusao(matriz.getTabelaMatrizConfusao(), checkBoxTempoResposta.isSelected());
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, VerificaErros.retornaMensagemErro(e), "Erro!", JOptionPane.ERROR_MESSAGE);
                }

                //Preenche labels com os filtros especificados
                matriz.getDescricaoMatriz().setText(tipoMatrizConfusao);
                matriz.getDescricaoJogador().setText(nomeJogador);
                matriz.getDescricaoPeriodoInicial().setText(formatTextPeriodoInicial.getText());
                matriz.getDescricaoPeriodoFinal().setText(formatTextPeriodoFinal.getText());
                matriz.getDescricaoSubFaseIntensidade().setText(descricaoSubFaseIntensidadeParaFrameMatrizConfusao);
                if (checkBoxApenasBaseline.isSelected()) {
                    matriz.getLabelApenasBaseline().setText("[X] Apenas Baseline");
                } else {
                    matriz.getLabelApenasBaseline().setText("[ ] Apenas Baseline");
                }

                //Adicional o Panel no TabbedPane
                tituloPanel = nomeJogador;
                if (!descricaoSubFaseIntensidadeParaFrameMatrizConfusao.equals("Todos")) {
                    tituloPanel = tituloPanel + " - " + descricaoSubFaseIntensidadeParaFrameMatrizConfusao;
                }
                jTabbedPane1.addTab(tituloPanel, matriz);
            }
        }
    }

    private void geraMatrizConfusaoTodosJogadores(ArrayList<JPanel> listaPanel, String tipoMatrizConfusao, String descricaoSubFaseIntensidadeParaFrameMatrizConfusao, String periodoInicial, String periodoFinal, String idFase, String idSubFase, String tituloPanel) {
        if (listaPanel == null) {
            listaPanel = new ArrayList<JPanel>();
        }
        FramePanelMatrizConfusao matriz = new FramePanelMatrizConfusao(jTabbedPane1, listaPanel);
        listaPanel.add(matriz);
        matriz.setIndice(listaPanel.size() - 1);

        try {
            int tipoBusca = 2;
            if (radioButtonExpressoes.isSelected()) {
                tipoBusca = 1;
            }
            matriz.getLinhasMatrizConfusao().setLinhasMatrizConfusao(matriz.getLinhasMatrizConfusao().getMatrizConfusaoDAO().matrizConfusaoExpressoes(tipoBusca, null, periodoInicial, periodoFinal, idFase, idSubFase, checkBoxApenasBaseline.isSelected(), null));
            matriz.getLinhasMatrizConfusao().listarLinhasMatrizConfusao(matriz.getTabelaMatrizConfusao(), checkBoxTempoResposta.isSelected());
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, VerificaErros.retornaMensagemErro(e), "Erro!", JOptionPane.ERROR_MESSAGE);
        }

        //Preenche labels com os filtros especificados
        matriz.getDescricaoMatriz().setText(tipoMatrizConfusao);
        matriz.getDescricaoJogador().setText("Todos");
        matriz.getDescricaoPeriodoInicial().setText(formatTextPeriodoInicial.getText());
        matriz.getDescricaoPeriodoFinal().setText(formatTextPeriodoFinal.getText());
        matriz.getDescricaoSubFaseIntensidade().setText(descricaoSubFaseIntensidadeParaFrameMatrizConfusao);
        if (checkBoxApenasBaseline.isSelected()) {
            matriz.getLabelApenasBaseline().setText("[X] Apenas Baseline");
        } else {
            matriz.getLabelApenasBaseline().setText("[ ] Apenas Baseline");
        }

        tituloPanel = "Todos: jogadores e SubFases";
        if (!descricaoSubFaseIntensidadeParaFrameMatrizConfusao.equals("Todos")) {
            tituloPanel = "Todos - " + descricaoSubFaseIntensidadeParaFrameMatrizConfusao;
        }
        //Adicional o Panel no TabbedPane
        jTabbedPane1.addTab(tituloPanel, matriz);
    }
}
